package cn.iocoder.yudao.module.bpm.service.taskinfo;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.bpm.controller.admin.taskinfo.vo.*;
import cn.iocoder.yudao.module.bpm.dal.dataobject.taskinfo.BpmTaskInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 流程任务信息 Service 接口
 *
 * @author 韩佳乐
 */
public interface BpmTaskInfoService {

    /**
     * 创建流程任务信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createTaskInfo(@Valid BpmTaskInfoSaveReqVO createReqVO);

    /**
     * 更新流程任务信息
     *
     * @param updateReqVO 更新信息
     */
    void updateTaskInfo(@Valid BpmTaskInfoSaveReqVO updateReqVO);
    /**
     * 更新流程任务状态信息信息
     *
     * @param id 任务id
     * @param status 更新信息
     */
    void updateTaskInfoStatus(Long id,int status);

    /**
     * 删除流程任务信息
     *
     * @param id 编号
     */
    void deleteTaskInfo(Long id);

    /**
     * 获得流程任务信息
     *
     * @param id 编号
     * @return 流程任务信息
     */
    BpmTaskInfoDO getTaskInfo(Long id);

    /**
     * 获得流程任务信息分页
     *
     * @param pageReqVO 分页查询
     * @return 流程任务信息分页
     */
    PageResult<BpmTaskInfoDO> getTaskInfoPage(BpmTaskInfoPageReqVO pageReqVO);

    /**
     * 获取任务信息
     * @param id 流程实例id
     * @return 任务信息
     */
    BpmTaskInfoDO getTaskInfoByProcInstId(String id);

    /**
     * 获取任务统计信息
     * @return 统计信息
     */
    BpmTaskInfoStatisticsVO getTaskInfoStatistic();

    /**
     * 获取当前登录用户的任务信息统计
     * @return 统计信息
     */
    BpmCurrUserTaskInfoStatisticsVO getCurrUserTaskInfoStatistics();

    /**
     * 判断项目下所有任务状态情况
     * @param projectId 项目id
     * @param userId 任务创建人
     * @return 返回检查状态
     */
    BpmTaskInfoCheckStatusVO checkTaskStatusInfo(Long projectId,Long userId);

    /**
     * 获取所有项目工时统计
     * @return 工时信息
     */
    List<BpmProjectTaskManHourStatisticsVO> getProjectManHourStatistics();

}